লারাভেল (Laravel) হলো একটি শক্তিশালী ও জনপ্রিয় PHP ফ্রেমওয়ার্ক, যা সহজে এবং দ্রুত ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। লারাভেলের অন্যতম প্রধান বৈশিষ্ট্য হলো এর রাউটিং সিস্টেম, যা URL বা পাথের সাথে নির্দিষ্ট কার্যক্রম বা কন্ট্রোলারের ফাংশনকে যুক্ত করতে সহায়তা করে। লারাভেল রাউটিং সিস্টেমের মাধ্যমে আমরা সহজে ও ব্যবহার উপযোগীভাবে ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারি। এখানে আমরা Laravel Routing-এর বিভিন্ন দিক বিস্তারিতভাবে আলোচনা করব।
লারাভেল রাউটিং আপনার অ্যাপ্লিকেশনের বিভিন্ন URL-কে নির্দিষ্ট ফাংশন বা কন্ট্রোলারের সাথে সংযুক্ত করতে সাহায্য করে। এটি কীভাবে কাজ করে এবং এর মাধ্যমে কীভাবে অ্যাপ্লিকেশনের বিভিন্ন অংশ নির্ধারণ করা যায়, তা আমরা এখানে আলোচনা করবো।
লারাভেলে সবচেয়ে সাধারণ রাউটিং হচ্ছে GET
, POST
, PUT
, এবং DELETE
HTTP রিকোয়েস্ট মেথডের মাধ্যমে রাউট নির্ধারণ করা।
Route::get('/home', function () {
return 'Welcome to the Home Page!';
});
এখানে /home
রাউটটি যখন কেউ ভিজিট করবে, তখন "Welcome to the Home Page!" মেসেজটি দেখানো হবে।
লারাভেলের মধ্যে রাউট ফাইলগুলো হলো:
routes/web.php
: ওয়েব ভিত্তিক রাউটের জন্য। এখানে ডিফল্ট সেশন এবং CSRF প্রটেকশন থাকে।routes/api.php
: API রাউটের জন্য। এখানে সেশন ব্যবহৃত হয় না এবং API ভিত্তিক অ্যাপ্লিকেশনের জন্য প্রযোজ্য।কোনো একটি URL-কে অন্য একটি URL-এ রিডিরেক্ট করতে চাইলে লারাভেলের Route::redirect
ব্যবহার করা হয়।
Route::redirect('/old-home', '/new-home');
এটি /old-home
রাউট থেকে /new-home
এ রিডিরেক্ট করবে।
কোনো রাউট থেকে সরাসরি ভিউ প্রদর্শন করা যায় Route::view
এর মাধ্যমে।
Route::view('/welcome', 'welcome');
এটি /welcome
রাউটে ভিজিট করলে resources/views/welcome.blade.php
ভিউটি রিটার্ন করবে।
আপনার অ্যাপ্লিকেশনের সমস্ত রাউট দেখতে চাইলে php artisan route:list
কমান্ড চালাতে পারেন।
রাউটকে কাস্টমাইজ করার জন্য লারাভেলে অনেক বৈশিষ্ট্য রয়েছে, যেমন রাউট প্যারামিটার, নেমড রাউট, এবং রাউট গ্রুপিং ইত্যাদি।
লারাভেলে রাউটের মধ্যে ডাইনামিক প্যারামিটার পাস করা যায়।
Route::get('/user/{id}', function ($id) {
return "User ID is: {$id}";
});
এখানে {id}
একটি রিকোয়েস্ট প্যারামিটার, যা URL থেকে ধরে নিয়ে কাজ করে।
Route::get('/user/{name?}', function ($name = 'Guest') {
return "User Name: {$name}";
});
এখানে {name}
প্যারামিটারটি ঐচ্ছিক এবং ডিফল্ট ভ্যালু Guest
সেট করা হয়েছে।
Route::get('/user/{id}', function ($id) {
return "User ID is: {$id}";
})->where('id', '[0-9]+');
এখানে id
শুধুমাত্র সংখ্যা হতে পারে।
রাউটের জন্য একটি নাম নির্ধারণ করা যায়, যাতে এটি পরবর্তীতে সহজে ব্যবহার করা যায়।
Route::get('/profile', 'ProfileController@show')->name('profile.show');
এখন আপনি এই রাউটটি যেকোনো জায়গায় route('profile.show')
এর মাধ্যমে ব্যবহার করতে পারেন।
রাউট গ্রুপ করার মাধ্যমে একাধিক রাউটের জন্য একই ধরনের সেটিংস প্রয়োগ করা যায়, যেমন middleware, namespaces ইত্যাদি।
Route::group(['prefix' => 'admin'], function () {
Route::get('/users', function () {
// অ্যাডমিনের জন্য ইউজার তালিকা
});
});
এখানে /admin/users
এ ভিজিট করলে ইউজার তালিকা দেখাবে।
Middleware রাউটের উপর নির্দিষ্ট ফিল্টার প্রয়োগ করার জন্য ব্যবহৃত হয়। এটি অনুমোদন, অথেনটিকেশন ইত্যাদির জন্য খুবই কার্যকর।
Route::get('/dashboard', function () {
// শুধুমাত্র অথেনটিকেটেড ইউজারদের জন্য
})->middleware('auth');
লারাভেলে রাউটের জন্য লজিক কন্ট্রোলারে রাখা যায়। এটি কোডকে সংগঠিত ও পুনরায় ব্যবহারযোগ্য করে তোলে।
Route::get('/users', [UserController::class, 'index']);
আপনি সাবডোমেইনের জন্য রাউট নির্ধারণ করতে পারেন।
Route::domain('{account}.example.com')->group(function () {
Route::get('user/{id}', function ($account, $id) {
return "Account: {$account}, User ID: {$id}";
});
});
রাউটের জন্য একটি প্রিফিক্স নির্ধারণ করা যায়, যাতে সব রাউটের সামনে একটি নির্দিষ্ট অংশ যুক্ত হয়।
Route::prefix('admin')->group(function () {
Route::get('/dashboard', function () {
return 'Admin Dashboard';
});
});
এটি /admin/dashboard
এ ভিজিট করলে Admin Dashboard
দেখাবে।
লারাভেলে রাউট প্যারামিটার থেকে সরাসরি মডেল ধরে আনতে রাউট মডেল বাইন্ডিং ব্যবহৃত হয়।
Route::get('/user/{user}', function (User $user) {
return $user;
});
এখানে {user}
প্যারামিটার থেকে স্বয়ংক্রিয়ভাবে User মডেলের ডেটা পাওয়া যাবে।
Route::bind('user', function ($value) {
return User::where('name', $value)->firstOrFail();
});
লারাভেলে ফলব্যাক রাউট তখন ব্যবহৃত হয় যখন কোনো রাউট পাওয়া না যায়।
Route::fallback(function () {
return 'Page Not Found';
});
রেট লিমিটিং ব্যবহার করে API বা ওয়েব রিকোয়েস্টের ওপর সীমা আরোপ করা যায়, যাতে কোনো নির্দিষ্ট সময়ে অধিক রিকোয়েস্ট প্রেরণ করা না হয়।
use Illuminate\Support\Facades\RateLimiter;
RateLimiter::for('global', function (Request $request) {
return Limit::perMinute(100);
});
Route::middleware('throttle:global')->group(function () {
Route::get('/profile', 'ProfileController@show');
});
HTML ফর্ম শুধুমাত্র GET
ও POST
মেথড সমর্থন করে। কিন্তু Laravel ফর্ম মেথড স্পুফিং ব্যবহার করে PUT
, PATCH
, বা DELETE
সমর্থন করে।
<form action="/post" method="POST">
@method('PUT')
@csrf
<button type="submit">Update Post</button>
</form>
বর্তমান রাউট সম্পর্কিত তথ্য অ্যাক্সেস করতে Route::current()
ব্যবহার করা হয়।
$currentRoute = Route::current()->getName();
CORS ব্যবহৃত হয় API বা অন্যান্য সিস্টেম থেকে আসা রিকোয়েস্ট অনুমোদনের জন্য।
আপনার cors.php
কনফিগ ফাইলে CORS নির্ধারণ করা যায়।
'supportsCredentials' => true,
'allowedOrigins' => ['*'],
'allowedMethods' => ['*'],
'allowedHeaders' => ['*'],
বড় অ্যাপ্লিকেশনগুলোর পারফরম্যান্স বাড়ানোর জন্য রাউট ক্যাশিং গুরুত্বপূর্ণ। php artisan route:cache
কমান্ড ব্যবহার করে রাউট ক্যাশ করা হয়।
লারাভেলের রাউটিং সিস্টেম একটি অত্যন্ত শক্তিশালী এবং ফ্লেক্সিবল টুল, যা ডেভেলপারদের অ্যাপ্লিকেশনের বিভিন্ন অংশকে নির্দিষ্টভাবে পরিচালনা করতে সহায়তা করে। এটি সাধারণ রাউট থেকে শুরু করে ডাইনামিক রাউট, সাবডোমেইন রাউটিং, মিডলওয়্যার ব্যবহারের মাধ্যমে নিরাপত্তা এবং কন্ট্রোলারের সাথে কাজ করার সুযোগ দেয়। রাউট গ্রুপিং, প্রিফিক্সিং এবং মডেল বাইন্ডিং লারাভেলের রাউটিং ব্যবস্থাকে আরও মজবুত এবং সহজ করে তোলে। বড় অ্যাপ্লিকেশন তৈরির ক্ষেত্রে লারাভেলের রাউটিং সিস্টেম ডেভেলপারদের জন্য কোডকে সংগঠিত এবং পুনঃব্যবহারযোগ্য করে তোলে, যা ডেভেলপমেন্টে সময় এবং প্রচেষ্টা সাশ্রয় করে।
Read more